package com.jmyd.commons.enums;

import com.jmyd.commons.exception.CustomException;
import lombok.Getter;

/**
 * 系统错误信息枚举类
 *
 * @author samphin
 * @since 2020-12-12 17:21:08
 */
public enum SystemErrorEnum {

    //系统级统一错误信息
    SYSTEM_ERROR(-1, "."),
    ERROR_PARAM(301, "参数错误."),
    INVALID_DATA(302, "无效数据."),
    PLEASE_LOGIN(-1000, "请重新登录."),
    PLEASE_RETRY_AGAIN(500, "操作失败."),
    UN_AUTH(401, "没访问权限."),
    ALLOPATRIC_LOGIN(402, "账号已在异地登录."),
    UN_OPERATION_AUTH(403, "操作权限不足."),
    LOGIN_PASSWORD_ERROR(603, "用户密码错误."),
    VALIDATE_CODE_IS_EMPTY(604, "验证码不能为空."),
    GET_VALIDATE_CODE(605, "请先获取验证码."),
    VALIDATE_CODE_ERROR(606, "验证码输入有误."),
    TOKEN_IS_EMPTY(607, "访问令牌不能为空."),
    TOKEN_VERIFICATION_ERROR(608, "访问令牌认证失败."),
    TOKEN_ANALYSIS_ERROR(609, "访问令牌认证解密失败."),
    TOKEN_INVALID_ERROR(610, "访问令牌无效."),
    TOKEN_EXPIRED_ERROR(611, "访问令牌已过期，请重新登录."),
    HYSTRIX_FALLBACK_ERROR(612, "访问异常."),
    ILLEGAL_REQUEST_ERROR(613, "非法请求."),
    ILLEGAL_LOGIN_ERROR(614, "非法登录."),
    QUERY_LOGIN_INFO_ERROR(615, "获取用户登录信息失败."),
    USER_REGISTER_ERROR(616, "用户信息注册失败."),
    NEW_OLD_PHONE_IDENTICAL_ERROR(617, "新旧手机号不能相同."),
    DEVELOPER_INFO_EXIST_ERROR(618, "该用户已成为开发者，请勿重复申请."),
    DEVELOPER_INFO_INVALID_ERROR(619, "开发者信息无效."),
    DEVELOPER_NO_ACTIVE_ERROR(620, "开发者已被禁用，请联系管理员."),
    DEVELOPER_APP_ID_EMPTY_ERROR(621, "开发者APP_ID不能为空."),
    DEVELOPER_APP_SECRET_EMPTY_ERROR(622, "开发者APP_SECRET不能为空."),
    DEVELOPER_CURRENT_PACKAGE_INVALID_ERROR(623, "开发者当前套餐已过期，请联系管理员."),
    OPENID_EMPTY_ERROR(624, "开发者openid不能为空."),
    OPENID_INVALID_ERROR(625, "开发者openid无效."),
    DEVELOPER_TEMPLATE_IS_NOT_EXIST_ERROR(626, "开发者展厅不存在."),
    DEVELOPER_INFO_UPDATE_ERROR(627, "开发者信息修改失败."),
    DEVELOPER_USER_ID_IS_EMPTY_ERROR(628, "开发者用户id不能为空."),
    DEVELOPER_PACKAGE_IS_NO_EXIST_ERROR(629, "开发者套餐信息不存在."),
    DEVELOPER_PACKAGE_CUST_IS_DEFICIENCY_ERROR(630, "开发者套餐客服数不足."),
    DEVELOPER_PACKAGE_LIVE_IS_DEFICIENCY_ERROR(631, "开发者套餐直播次数不足."),
    DEVELOPER_PACKAGE_BROWSE_IS_DEFICIENCY_ERROR(632, "开发者套餐访客次数不足."),
    DEVELOPER_PACKAGE_VAR_LOOK_IS_DEFICIENCY_ERROR(633, "开发者套餐VR带看次数不足."),
    DEVELOPER_PACKAGE_PUBLISH_IS_DEFICIENCY_ERROR(634, "开发者套餐发布次数不足."),
    DEVELOPER_TEMPLATE_CREATE_TYPE_IS_ERROR(635, "开发者展厅创建类型不匹配."),
    TELEPHONE_FORMAT_IS_ERROR(636, "请输入正确手机号."),

    /**
     * 系统管理范围（-4000）-（-4400）
     */
    USER_NOT_EXIST(-6, "用户名或密码错误."),
    DUPLICATE_OPERATION_ERROR(-5, "操作重复."),
    LOGIN_ERROR(-6, "用户名或密码错误."),
    DUPLICATE_USER_NAME(-7, "用户名已存在，不可重复."),
    DUPLICATE_MENU_NAME(-8, "菜单名称已存在，不可重复."),
    DUPLICATE_USER_GROUP_NAME(-9, "用户组已存在，不可重复."),
    DUPLICATE_ROLE_NAME(-10, "角色名称已存在，不可重复."),
    DUPLICATE_PERMISSION_NAME(-11, "权限名称已存在，不可重复."),
    BIND_PERMISSION(-12, "该角色绑定了权限，无法删除."),
    BIND_RESOURCE(-13, "该权限绑定了菜单或按钮，无法删除."),
    EQUIPMENT_SUPPLY_EXIST(-14, "该设备已绑定此物料，不可重复添加."),
    EQUIPMENT_INTERVAL_PRICE(-15, "该设备物料此时间段的价格已存在."),
    OLD_PASSWORD_ERROR(-16, "原密码错误."),
    ROLE_NOT_EXIST(-17, "角色不存在."),
    EQUIPMENT_CODE_ERR(-18, "设备编码不存在."),
    EQUIPMENT_CODE_DESTROY(-19, "设备编码已销毁不可使用."),
    DEPT_NAME_EXIST(-20, "父部门下该部门名称已存在."),
    DEPT_CODE_EXIST(-21, "部门编码已存在."),
    DUPLICATE_USER_PHONE(-23, "该手机号已被注册."),
    USER_ROLE_CODE_INIT(-24, "初始化用户角色失败."),
    OPERATION_NOT_ALLOWED(-25, "操作不允许."),
    ACCOUNT_NOT_EXIST(-27, "账号不存在."),
    DUPLICATE_ROLE_CODE(-37, "角色编码已存在，不可重复."),
    ROLE_CODE_UNCHANGE(-38, "该角色编码不可更改."),
    ROLE_CODE_UNDELETE(-39, "该角色不可删除."),
    CLASS_CODE_EXIST(-40, "类别编码已存在."),
    CLASS_NAME_EXIST(-41, "类别名称已存在."),
    NOT_WORK(-43, "非在职用户不可登录."),
    NOT_ACTIVE(-44, "该帐号已被封号."),
    BUTTON_CODE_EXIST_ERROR(-47, "按钮编码已存在."),
    LOGOUT_ERROR(-48, "用户登出失败."),
    PASSWORD_ENCRYPTION_ERROR(-50, "密码不能以明文传输."),
    QUERY_CITY_INFO_ERROR(-51, "获取城市位置信息失败."),
    BIRTHDAY_SUBSTRING_ERROR(-52, "出生日期截取失败."),
    ID_CARD_VALIDATE_ERROR(-53, "身份证校验失败."),
    REAL_NAME_VALIDATE_ERROR(-54, "真实姓名校验失败."),
    DELETE_USER_GROUP_ERROR(-55, "删除用户组信息异常."),
    UPDATE_USER_INFO_ERROR(-56, "用户信息更新失败."),
    SYSTEM_DEPT_NOT_ALLOW_UPDATE_ERROR(-57, "系统部门不允许修改."),
    QUERY_USER_ROLES_ERROR(-58, "获取用户角色信息失败."),
    PASSWORD_IS_EXIST_ERROR(-59, "新旧密码相同."),
    ROLE_BIND_USER_ERROR(-60, "角色绑定用户不能删除."),
    MENU_UPDATE_ERROR(-61, "菜单删除失败."),
    USER_PHONE_IS_NOT_EXIST_ERROR(-62, "该手机号不存在，请重新注册."),
    LOGIN_COUNT_MORE_THAN_FIVE_ERROR(-63, "密码输入错误5次，已锁定，1小时候后重试."),
    TELEPHONE_SUBMIT_FORM_COUNT_ERROR(-64, "亲，一个手机号24小时只能报价3次哦!!!"),
    USER_AVATAR_UPLOAD_ERROR(-65, "用户头像上传失败."),
    USER_ACCOUNT_BALANCE_IS_NOT_EXIST_ERROR(-66, "用户资金账户不存在."),
    DEFAULT_WEB_USER_IS_NOT_EXIST_ERROR(-67, "默认C端用户不存在."),

    /**
     * sms-errorCode 范围(-1700)—(- 1899)
     */
    INVALID_SMS_VCODE_EMPTY(-1700, "验证码不能为空."),
    INVALID_SMS_VCODE(-1701, "验证码已失效."),
    ERROR_SMS_VCODE(-1702, "验证码错误."),
    ERROR_SMS_SERVICE(-1703, "短信服务不可用."),
    ERROR_SMS_SEND_FAIL(-1704, "短信发送失败."),
    PUSH_MESSAGE_DEVICE_NO_EXIST_ERROR(-1705, "消息推送终端不存在."),
    PUSH_MESSAGE_PUSH_ERROR(-1706, "消息发送失败."),
    PUSH_MESSAGE_SERVER_ERROR(-1707, "消息服务连接超时."),

    //文件系统
    INIT_OBS_ERROR(2000, "初始化OBS客户端失败."),
    FILE_UPLOAD_OSS_ERROR(2001, "文件上传OSS失败."),
    FILE_UPLOAD_OBS_ERROR(2002, "文件上传OBS失败."),
    FILE_UPLOAD_COS_ERROR(2003, "文件上传COS失败."),
    FILE_GET_REDIS_ETAG_ERROR(2004, "获取REDIS分片标签集合失败."),
    FILE_UPLOAD_WEED_FS_ERROR(2005, "文件上传WeedFs失败."),
    FILE_UPLOAD_LOCAL_ERROR(2006, "文件上传本地失败."),
    FILE_DOWNLOAD_ERROR(2007, "文件下载失败."),
    FILE_MERGE_ERROR(2008, "合并分片文件失败."),
    FILE_MAX_REQUEST_SIZE_ERROR(2009, "文件请求大小超过限制."),
    FILE_MAX_SIZE_ERROR(2010, "文件大小超过限制"),
    FILE_EMPTY_ERROR(2011, "文件不能为空"),
    FILE_NAME_ILLEGALITY_ERROR(2012, "文件名非法"),

    //微信相关
    GET_WE_CHAT_TOKEN_ERROR(-6001, "获取微信access_token失败"),
    WE_CHAT_AUTHORIZE_LOGIN_ERROR(-6002, "微信授权登录失败"),
    WE_CHAT_GET_USER_INFO_ERROR(-6003, "获取微信用户信息失败"),
    WE_CHAT_PAY_REFUND_ERROR(-6004, "微信退款失败"),
    WE_CHAT_PAY_SIGNATURE_ERROR(-6005, "签名验证失败"),
    WE_CHAT_PAY_QUERY_ORDER_ERROR(-6006, "查询微信订单失败"),
    WE_CHAT_PAY_UNIFIED_ORDER_ERROR(-6007, "微信下单失败"),
    WE_CHAT_PAY_QR_CODE_ERROR(-6008, "微信下单生成二维码失败"),
    ALI_PAY_QR_CODE_ERROR(-6009, "支付宝下单生成二维码失败"),
    WE_CHAT_PAY_ERROR(-6010, "用户余额变更失败，支付失败"),
    ALI_PAY_PUBLIC_KEY_EMPTY_ERROR(-6011, "支付宝公钥加载失败"),
    ALI_PAY_MERCHANT_PRIVATE_KEY_EMPTY_ERROR(-6012, "支付宝商户私钥加载失败"),
    WE_CHAT_BIND_ERROR(-6013, "微信账户已绑定用户"),
    PAY_SUCCESS_FLAG_ERROR(-6014, "支付成功标识查询失败"),
    WE_CHAT_LOGIN_ERROR(-6015, "微信授权登录失败，请重新授权"),
    WE_CHAT_BIND_TELEPHONE_ERROR(-6016, "该手机号已存绑定微信."),

    //优惠券错误编码
    SCENE_COUPON_IS_DRAW_ERROR(-10000, "优惠券已被领取."),
    SCENE_COUPON_IS_EXPIRED_ERROR(-10001, "优惠券已过期"),
    SCENE_COUPON_CODE_IS_EXPIRED_ERROR(-10002, "优惠券已过期"),
    SCENE_COUPON_CODE_IS_USED_ERROR(-10003, "优惠券已使用."),
    SCENE_COUPON_CODE_IS_INVALID_ERROR(-10004, "优惠券无效."),
    SCENE_COUPON_IS_UNUSED_ERROR(-10005, "优惠券暂未使用."),
    SCENE_COUPON_DISCOUNT_AMOUNT_IS_ERROR(-10006, "优惠券折扣范围必须在0~1之间且小数位不能超过2位."),

    ;
    /**
     * 错误码
     */
    @Getter
    private Integer errorCode;

    /**
     * 错误消息
     */
    @Getter
    private String errorMsg;

    SystemErrorEnum(int errorCode, String errorMsg) {
        this.errorCode = errorCode;
        this.errorMsg = errorMsg;
    }

    public CustomException getCustomException() {
        return getCustomException(errorMsg);
    }

    /**
     * 返回输入的错误信息
     *
     * @param msg
     */
    public CustomException getCustomException(String msg) {
        return new CustomException(errorCode, msg);
    }
}
